﻿/*
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
(function () {
  function r() {
    return !1;
  }
  var n = CKEDITOR.tools,
    B = CKEDITOR.plugins.pastetools,
    t = B.filters.common,
    k = t.styles,
    C = t.createAttributeStack,
    z = t.lists.getElementIndentation,
    D = ["o:p", "xml", "script", "meta", "link"],
    E =
      "v:arc v:curve v:line v:oval v:polyline v:rect v:roundrect v:group".split(
        " "
      ),
    A = {},
    y = 0,
    q = {},
    g,
    p;
  CKEDITOR.plugins.pastetools.filters.word = q;
  CKEDITOR.plugins.pastefromword = q;
  q.rules = function (c, b, d) {
    function e(a) {
      (a.attributes["o:gfxdata"] || "v:group" === a.parent.name) &&
        l.push(a.attributes.id);
    }
    var f = Boolean(c.match(/mso-list:\s*l\d+\s+level\d+\s+lfo\d+/)),
      l = [],
      w = {
        root: function (a) {
          a.filterChildren(d);
          CKEDITOR.plugins.pastefromword.lists.cleanup(g.createLists(a));
        },
        elementNames: [
          [/^\?xml:namespace$/, ""],
          [/^v:shapetype/, ""],
          [new RegExp(D.join("|")), ""],
        ],
        elements: {
          a: function (a) {
            if (a.attributes.name) {
              if ("_GoBack" == a.attributes.name) {
                delete a.name;
                return;
              }
              if (a.attributes.name.match(/^OLE_LINK\d+$/)) {
                delete a.name;
                return;
              }
            }
            if (a.attributes.href && a.attributes.href.match(/#.+$/)) {
              var b = a.attributes.href.match(/#(.+)$/)[1];
              A[b] = a;
            }
            a.attributes.name &&
              A[a.attributes.name] &&
              ((a = A[a.attributes.name]),
              (a.attributes.href = a.attributes.href.replace(
                /.*#(.*)$/,
                "#$1"
              )));
          },
          div: function (a) {
            if (b.plugins.pagebreak && a.attributes["data-cke-pagebreak"])
              return a;
            k.createStyleStack(a, d, b);
          },
          img: function (a) {
            if (a.parent && a.parent.attributes) {
              var b = a.parent.attributes;
              (b = b.style || b.STYLE) &&
                b.match(/mso\-list:\s?Ignore/) &&
                (a.attributes["cke-ignored"] = !0);
            }
            k.mapCommonStyles(a);
            a.attributes.src &&
              a.attributes.src.match(/^file:\/\//) &&
              a.attributes.alt &&
              a.attributes.alt.match(/^https?:\/\//) &&
              (a.attributes.src = a.attributes.alt);
            a = a.attributes["v:shapes"]
              ? a.attributes["v:shapes"].split(" ")
              : [];
            b = CKEDITOR.tools.array.every(a, function (a) {
              return -1 < l.indexOf(a);
            });
            if (a.length && b) return !1;
          },
          p: function (a) {
            a.filterChildren(d);
            if (
              a.attributes.style &&
              a.attributes.style.match(/display:\s*none/i)
            )
              return !1;
            if (g.thisIsAListItem(b, a))
              p.isEdgeListItem(b, a) && p.cleanupEdgeListItem(a),
                g.convertToFakeListItem(b, a),
                n.array.reduce(
                  a.children,
                  function (a, b) {
                    "p" === b.name &&
                      (0 < a &&
                        new CKEDITOR.htmlParser.element("br").insertBefore(b),
                      b.replaceWithChildren(),
                      (a += 1));
                    return a;
                  },
                  0
                );
            else {
              var c = a.getAscendant(function (a) {
                  return "ul" == a.name || "ol" == a.name;
                }),
                f = n.parseCssText(a.attributes.style);
              c &&
                !c.attributes["cke-list-level"] &&
                f["mso-list"] &&
                f["mso-list"].match(/level/) &&
                (c.attributes["cke-list-level"] =
                  f["mso-list"].match(/level(\d+)/)[1]);
              b.config.enterMode == CKEDITOR.ENTER_BR &&
                (delete a.name, a.add(new CKEDITOR.htmlParser.element("br")));
            }
            k.createStyleStack(a, d, b);
          },
          pre: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h1: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h2: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h3: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h4: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h5: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          h6: function (a) {
            g.thisIsAListItem(b, a) && g.convertToFakeListItem(b, a);
            k.createStyleStack(a, d, b);
          },
          font: function (a) {
            if (a.getHtml().match(/^\s*$/))
              return (
                a.parent.type === CKEDITOR.NODE_ELEMENT &&
                  new CKEDITOR.htmlParser.text(" ").insertAfter(a),
                !1
              );
            b &&
              !0 === b.config.pasteFromWordRemoveFontStyles &&
              a.attributes.size &&
              delete a.attributes.size;
            CKEDITOR.dtd.tr[a.parent.name] &&
            CKEDITOR.tools.arrayCompare(
              CKEDITOR.tools.object.keys(a.attributes),
              ["class", "style"]
            )
              ? k.createStyleStack(a, d, b)
              : C(a, d);
          },
          ul: function (a) {
            if (f)
              return (
                "li" == a.parent.name &&
                  0 === n.indexOf(a.parent.children, a) &&
                  k.setStyle(a.parent, "list-style-type", "none"),
                g.dissolveList(a),
                !1
              );
          },
          li: function (a) {
            p.correctLevelShift(a);
            f &&
              ((a.attributes.style = k.normalizedStyles(a, b)),
              k.pushStylesLower(a));
          },
          ol: function (a) {
            if (f)
              return (
                "li" == a.parent.name &&
                  0 === n.indexOf(a.parent.children, a) &&
                  k.setStyle(a.parent, "list-style-type", "none"),
                g.dissolveList(a),
                !1
              );
          },
          span: function (a) {
            a.filterChildren(d);
            a.attributes.style = k.normalizedStyles(a, b);
            if (
              !a.attributes.style ||
              a.attributes.style.match(/^mso\-bookmark:OLE_LINK\d+$/) ||
              a.getHtml().match(/^(\s|&nbsp;)+$/)
            )
              return t.elements.replaceWithChildren(a), !1;
            a.attributes.style.match(/FONT-FAMILY:\s*Symbol/i) &&
              a.forEach(
                function (a) {
                  a.value = a.value.replace(/&nbsp;/g, "");
                },
                CKEDITOR.NODE_TEXT,
                !0
              );
            k.createStyleStack(a, d, b);
          },
          "v:imagedata": r,
          "v:shape": function (a) {
            var b = !1;
            if (null === a.getFirst("v:imagedata")) e(a);
            else {
              a.parent.find(function (c) {
                "img" == c.name &&
                  c.attributes &&
                  c.attributes["v:shapes"] == a.attributes.id &&
                  (b = !0);
              }, !0);
              if (b) return !1;
              var c = "";
              "v:group" === a.parent.name
                ? e(a)
                : (a.forEach(
                    function (a) {
                      a.attributes &&
                        a.attributes.src &&
                        (c = a.attributes.src);
                    },
                    CKEDITOR.NODE_ELEMENT,
                    !0
                  ),
                  a.filterChildren(d),
                  (a.name = "img"),
                  (a.attributes.src = a.attributes.src || c),
                  delete a.attributes.type);
            }
          },
          style: function () {
            return !1;
          },
          object: function (a) {
            return !(!a.attributes || !a.attributes.data);
          },
          br: function (a) {
            if (
              b.plugins.pagebreak &&
              ((a = n.parseCssText(a.attributes.style, !0)),
              "always" === a["page-break-before"] ||
                "page" === a["break-before"])
            )
              return (
                (a = CKEDITOR.plugins.pagebreak.createElement(b)),
                CKEDITOR.htmlParser.fragment.fromHtml(a.getOuterHtml())
                  .children[0]
              );
          },
        },
        attributes: {
          style: function (a, c) {
            return k.normalizedStyles(c, b) || !1;
          },
          class: function (a) {
            a = a.replace(
              /(el\d+)|(font\d+)|msonormal|msolistparagraph\w*/gi,
              ""
            );
            return "" === a ? !1 : a;
          },
          cellspacing: r,
          cellpadding: r,
          border: r,
          "v:shapes": r,
          "o:spid": r,
        },
        comment: function (a) {
          a.match(/\[if.* supportFields.*\]/) && y++;
          "[endif]" == a && (y = 0 < y ? y - 1 : 0);
          return !1;
        },
        text: function (a, b) {
          if (y) return "";
          var c = b.parent && b.parent.parent;
          return c &&
            c.attributes &&
            c.attributes.style &&
            c.attributes.style.match(/mso-list:\s*ignore/i)
            ? a.replace(/&nbsp;/g, " ")
            : a;
        },
      };
    n.array.forEach(E, function (a) {
      w.elements[a] = e;
    });
    return w;
  };
  q.lists = {
    thisIsAListItem: function (c, b) {
      return p.isEdgeListItem(c, b) ||
        (b.attributes.style &&
          b.attributes.style.match(/mso\-list:\s?l\d/) &&
          "li" !== b.parent.name) ||
        b.attributes["cke-dissolved"] ||
        b.getHtml().match(/<!\-\-\[if !supportLists]\-\->/)
        ? !0
        : !1;
    },
    convertToFakeListItem: function (c, b) {
      p.isDegenerateListItem(c, b) && p.assignListLevels(c, b);
      this.getListItemInfo(b);
      if (!b.attributes["cke-dissolved"]) {
        var d;
        b.forEach(function (b) {
          !d &&
            "img" == b.name &&
            b.attributes["cke-ignored"] &&
            "*" == b.attributes.alt &&
            ((d = "·"), b.remove());
        }, CKEDITOR.NODE_ELEMENT);
        b.forEach(function (b) {
          d || b.value.match(/^ /) || (d = b.value);
        }, CKEDITOR.NODE_TEXT);
        if ("undefined" == typeof d) return;
        b.attributes["cke-symbol"] = d.replace(/(?: |&nbsp;).*$/, "");
        g.removeSymbolText(b);
      }
      var e = b.attributes && n.parseCssText(b.attributes.style);
      if (e["margin-left"]) {
        var f = e["margin-left"],
          l = b.attributes["cke-list-level"];
        (f = Math.max(CKEDITOR.tools.convertToPx(f) - 40 * l, 0))
          ? (e["margin-left"] = f + "px")
          : delete e["margin-left"];
        b.attributes.style = CKEDITOR.tools.writeCssText(e);
      }
      b.name = "cke:li";
    },
    convertToRealListItems: function (c) {
      var b = [];
      c.forEach(
        function (c) {
          "cke:li" == c.name && ((c.name = "li"), b.push(c));
        },
        CKEDITOR.NODE_ELEMENT,
        !1
      );
      return b;
    },
    removeSymbolText: function (c) {
      var b = c.attributes["cke-symbol"],
        d = c.findOne(function (c) {
          return c.value && -1 < c.value.indexOf(b);
        }, !0),
        e;
      d &&
        ((d.value = d.value.replace(b, "")),
        (e = d.parent),
        e.getHtml().match(/^(\s|&nbsp;)*$/) && e !== c
          ? e.remove()
          : d.value || d.remove());
    },
    setListSymbol: function (c, b, d) {
      d = d || 1;
      var e = n.parseCssText(c.attributes.style);
      if ("ol" == c.name) {
        if (c.attributes.type || e["list-style-type"]) return;
        var f = {
            "[ivx]": "lower-roman",
            "[IVX]": "upper-roman",
            "[a-z]": "lower-alpha",
            "[A-Z]": "upper-alpha",
            "\\d": "decimal",
          },
          l;
        for (l in f)
          if (g.getSubsectionSymbol(b).match(new RegExp(l))) {
            e["list-style-type"] = f[l];
            break;
          }
        c.attributes["cke-list-style-type"] = e["list-style-type"];
      } else
        (f = { "·": "disc", o: "circle", "§": "square" }),
          !e["list-style-type"] && f[b] && (e["list-style-type"] = f[b]);
      g.setListSymbol.removeRedundancies(e, d);
      (c.attributes.style = CKEDITOR.tools.writeCssText(e)) ||
        delete c.attributes.style;
    },
    setListStart: function (c) {
      for (var b = [], d = 0, e = 0; e < c.children.length; e++)
        b.push(c.children[e].attributes["cke-symbol"] || "");
      b[0] || d++;
      switch (c.attributes["cke-list-style-type"]) {
        case "lower-roman":
        case "upper-roman":
          c.attributes.start = g.toArabic(g.getSubsectionSymbol(b[d])) - d;
          break;
        case "lower-alpha":
        case "upper-alpha":
          c.attributes.start =
            g
              .getSubsectionSymbol(b[d])
              .replace(/\W/g, "")
              .toLowerCase()
              .charCodeAt(0) -
            96 -
            d;
          break;
        case "decimal":
          c.attributes.start =
            parseInt(g.getSubsectionSymbol(b[d]), 10) - d || 1;
      }
      "1" == c.attributes.start && delete c.attributes.start;
      delete c.attributes["cke-list-style-type"];
    },
    numbering: {
      toNumber: function (c, b) {
        function d(b) {
          b = b.toUpperCase();
          for (var c = 1, d = 1; 0 < b.length; d *= 26)
            (c +=
              "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(b.charAt(b.length - 1)) * d),
              (b = b.substr(0, b.length - 1));
          return c;
        }
        function e(b) {
          var c = [
            [1e3, "M"],
            [900, "CM"],
            [500, "D"],
            [400, "CD"],
            [100, "C"],
            [90, "XC"],
            [50, "L"],
            [40, "XL"],
            [10, "X"],
            [9, "IX"],
            [5, "V"],
            [4, "IV"],
            [1, "I"],
          ];
          b = b.toUpperCase();
          for (var d = c.length, a = 0, e = 0; e < d; ++e)
            for (
              var g = c[e], u = g[1].length;
              b.substr(0, u) == g[1];
              b = b.substr(u)
            )
              a += g[0];
          return a;
        }
        return "decimal" == b
          ? Number(c)
          : "upper-roman" == b || "lower-roman" == b
          ? e(c.toUpperCase())
          : "lower-alpha" == b || "upper-alpha" == b
          ? d(c)
          : 1;
      },
      getStyle: function (c) {
        c = c.slice(0, 1);
        var b = {
          i: "lower-roman",
          v: "lower-roman",
          x: "lower-roman",
          l: "lower-roman",
          m: "lower-roman",
          I: "upper-roman",
          V: "upper-roman",
          X: "upper-roman",
          L: "upper-roman",
          M: "upper-roman",
        }[c];
        b ||
          ((b = "decimal"),
          c.match(/[a-z]/) && (b = "lower-alpha"),
          c.match(/[A-Z]/) && (b = "upper-alpha"));
        return b;
      },
    },
    getSubsectionSymbol: function (c) {
      return (c.match(/([\da-zA-Z]+).?$/) || ["placeholder", "1"])[1];
    },
    setListDir: function (c) {
      var b = 0,
        d = 0;
      c.forEach(function (c) {
        "li" == c.name &&
          ("rtl" == (c.attributes.dir || c.attributes.DIR || "").toLowerCase()
            ? d++
            : b++);
      }, CKEDITOR.ELEMENT_NODE);
      d > b && (c.attributes.dir = "rtl");
    },
    createList: function (c) {
      return (c.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/) || [])[1]
        ? new CKEDITOR.htmlParser.element("ol")
        : new CKEDITOR.htmlParser.element("ul");
    },
    createLists: function (c) {
      function b(b) {
        return CKEDITOR.tools.array.reduce(
          b,
          function (b, a) {
            if (a.attributes && a.attributes.style)
              var c = CKEDITOR.tools.parseCssText(a.attributes.style)[
                "margin-left"
              ];
            return c ? b + parseInt(c, 10) : b;
          },
          0
        );
      }
      var d,
        e,
        f,
        l = g.convertToRealListItems(c);
      if (0 === l.length) return [];
      var k = g.groupLists(l);
      for (c = 0; c < k.length; c++) {
        var a = k[c],
          h = a[0];
        for (f = 0; f < a.length; f++)
          if (1 == a[f].attributes["cke-list-level"]) {
            h = a[f];
            break;
          }
        var h = [g.createList(h)],
          m = h[0],
          u = [h[0]];
        m.insertBefore(a[0]);
        for (f = 0; f < a.length; f++) {
          d = a[f];
          for (e = d.attributes["cke-list-level"]; e > h.length; ) {
            var v = g.createList(d),
              x = m.children;
            0 < x.length
              ? x[x.length - 1].add(v)
              : ((x = new CKEDITOR.htmlParser.element("li", {
                  style: "list-style-type:none",
                })),
                x.add(v),
                m.add(x));
            h.push(v);
            u.push(v);
            m = v;
            e == h.length && g.setListSymbol(v, d.attributes["cke-symbol"], e);
          }
          for (; e < h.length; )
            h.pop(),
              (m = h[h.length - 1]),
              e == h.length &&
                g.setListSymbol(m, d.attributes["cke-symbol"], e);
          d.remove();
          m.add(d);
        }
        h[0].children.length &&
          ((f = h[0].children[0].attributes["cke-symbol"]),
          !f &&
            1 < h[0].children.length &&
            (f = h[0].children[1].attributes["cke-symbol"]),
          f && g.setListSymbol(h[0], f));
        for (f = 0; f < u.length; f++) g.setListStart(u[f]);
        for (f = 0; f < a.length; f++) this.determineListItemValue(a[f]);
      }
      CKEDITOR.tools.array.forEach(l, function (a) {
        for (var c = [], d = a.parent; d; )
          "li" === d.name && c.push(d), (d = d.parent);
        var c = b(c),
          e;
        c &&
          ((a.attributes = a.attributes || {}),
          (d = CKEDITOR.tools.parseCssText(a.attributes.style)),
          (e = d["margin-left"] || 0),
          (e = Math.max(parseInt(e, 10) - c, 0))
            ? (d["margin-left"] = e + "px")
            : delete d["margin-left"],
          (a.attributes.style = CKEDITOR.tools.writeCssText(d)));
      });
      return l;
    },
    cleanup: function (c) {
      var b = [
          "cke-list-level",
          "cke-symbol",
          "cke-list-id",
          "cke-indentation",
          "cke-dissolved",
        ],
        d,
        e;
      for (d = 0; d < c.length; d++)
        for (e = 0; e < b.length; e++) delete c[d].attributes[b[e]];
    },
    determineListItemValue: function (c) {
      if ("ol" === c.parent.name) {
        var b = this.calculateValue(c),
          d = c.attributes["cke-symbol"].match(/[a-z0-9]+/gi),
          e;
        d &&
          ((d = d[d.length - 1]),
          (e =
            c.parent.attributes["cke-list-style-type"] ||
            this.numbering.getStyle(d)),
          (d = this.numbering.toNumber(d, e)),
          d !== b && (c.attributes.value = d));
      }
    },
    calculateValue: function (c) {
      if (!c.parent) return 1;
      var b = c.parent;
      c = c.getIndex();
      var d = null,
        e,
        f,
        g;
      for (g = c; 0 <= g && null === d; g--)
        (f = b.children[g]),
          f.attributes &&
            void 0 !== f.attributes.value &&
            ((e = g), (d = parseInt(f.attributes.value, 10)));
      null === d &&
        ((d =
          void 0 !== b.attributes.start ? parseInt(b.attributes.start, 10) : 1),
        (e = 0));
      return d + (c - e);
    },
    dissolveList: function (c) {
      function b(a) {
        return 50 <= a
          ? "l" + b(a - 50)
          : 40 <= a
          ? "xl" + b(a - 40)
          : 10 <= a
          ? "x" + b(a - 10)
          : 9 == a
          ? "ix"
          : 5 <= a
          ? "v" + b(a - 5)
          : 4 == a
          ? "iv"
          : 1 <= a
          ? "i" + b(a - 1)
          : "";
      }
      function d(a, b) {
        function c(b, d) {
          return b && b.parent
            ? a(b.parent)
              ? c(b.parent, d + 1)
              : c(b.parent, d)
            : d;
        }
        return c(b, 0);
      }
      var e = function (b) {
          return function (a) {
            return a.name == b;
          };
        },
        f = function (b) {
          return e("ul")(b) || e("ol")(b);
        },
        g = CKEDITOR.tools.array,
        w = [],
        a,
        h;
      c.forEach(
        function (b) {
          w.push(b);
        },
        CKEDITOR.NODE_ELEMENT,
        !1
      );
      a = g.filter(w, e("li"));
      var m = g.filter(w, f);
      g.forEach(m, function (a) {
        var c = a.attributes.type,
          h = parseInt(a.attributes.start, 10) || 1,
          m = d(f, a) + 1;
        c || (c = n.parseCssText(a.attributes.style)["list-style-type"]);
        g.forEach(g.filter(a.children, e("li")), function (d, e) {
          var f;
          switch (c) {
            case "disc":
              f = "·";
              break;
            case "circle":
              f = "o";
              break;
            case "square":
              f = "§";
              break;
            case "1":
            case "decimal":
              f = h + e + ".";
              break;
            case "a":
            case "lower-alpha":
              f = String.fromCharCode(97 + h - 1 + e) + ".";
              break;
            case "A":
            case "upper-alpha":
              f = String.fromCharCode(65 + h - 1 + e) + ".";
              break;
            case "i":
            case "lower-roman":
              f = b(h + e) + ".";
              break;
            case "I":
            case "upper-roman":
              f = b(h + e).toUpperCase() + ".";
              break;
            default:
              f = "ul" == a.name ? "·" : h + e + ".";
          }
          d.attributes["cke-symbol"] = f;
          d.attributes["cke-list-level"] = m;
        });
      });
      a = g.reduce(
        a,
        function (b, a) {
          var c = a.children[0];
          if (
            c &&
            c.name &&
            c.attributes.style &&
            c.attributes.style.match(/mso-list:/i)
          ) {
            k.pushStylesLower(a, { "list-style-type": !0, display: !0 });
            var d = n.parseCssText(c.attributes.style, !0);
            k.setStyle(a, "mso-list", d["mso-list"], !0);
            k.setStyle(c, "mso-list", "");
            delete a["cke-list-level"];
            (c = d.display ? "display" : d.DISPLAY ? "DISPLAY" : "") &&
              k.setStyle(a, "display", d[c], !0);
          }
          if (1 === a.children.length && f(a.children[0])) return b;
          a.name = "p";
          a.attributes["cke-dissolved"] = !0;
          b.push(a);
          return b;
        },
        []
      );
      for (h = a.length - 1; 0 <= h; h--) a[h].insertAfter(c);
      for (h = m.length - 1; 0 <= h; h--) delete m[h].name;
    },
    groupLists: function (c) {
      var b,
        d,
        e = [[c[0]]],
        f = e[0];
      d = c[0];
      d.attributes["cke-indentation"] = d.attributes["cke-indentation"] || z(d);
      for (b = 1; b < c.length; b++) {
        d = c[b];
        var l = c[b - 1];
        d.attributes["cke-indentation"] =
          d.attributes["cke-indentation"] || z(d);
        d.previous !== l && (g.chopDiscontinuousLists(f, e), e.push((f = [])));
        f.push(d);
      }
      g.chopDiscontinuousLists(f, e);
      return e;
    },
    chopDiscontinuousLists: function (c, b) {
      for (var d = {}, e = [[]], f, l = 0; l < c.length; l++) {
        var k = d[c[l].attributes["cke-list-level"]],
          a = this.getListItemInfo(c[l]),
          h,
          m;
        k
          ? ((m = k.type.match(/alpha/) && 7 == k.index ? "alpha" : m),
            (m =
              "o" == c[l].attributes["cke-symbol"] && 14 == k.index
                ? "alpha"
                : m),
            (h = g.getSymbolInfo(c[l].attributes["cke-symbol"], m)),
            (a = this.getListItemInfo(c[l])),
            (k.type != h.type ||
              (f && a.id != f.id && !this.isAListContinuation(c[l]))) &&
              e.push([]))
          : (h = g.getSymbolInfo(c[l].attributes["cke-symbol"]));
        for (
          f = parseInt(c[l].attributes["cke-list-level"], 10) + 1;
          20 > f;
          f++
        )
          d[f] && delete d[f];
        d[c[l].attributes["cke-list-level"]] = h;
        e[e.length - 1].push(c[l]);
        f = a;
      }
      [].splice.apply(b, [].concat([n.indexOf(b, c), 1], e));
    },
    isAListContinuation: function (c) {
      var b = c;
      do
        if ((b = b.previous) && b.type === CKEDITOR.NODE_ELEMENT) {
          if (void 0 === b.attributes["cke-list-level"]) break;
          if (b.attributes["cke-list-level"] === c.attributes["cke-list-level"])
            return b.attributes["cke-list-id"] === c.attributes["cke-list-id"];
        }
      while (b);
      return !1;
    },
    toArabic: function (c) {
      return c.match(/[ivxl]/i)
        ? c.match(/^l/i)
          ? 50 + g.toArabic(c.slice(1))
          : c.match(/^lx/i)
          ? 40 + g.toArabic(c.slice(1))
          : c.match(/^x/i)
          ? 10 + g.toArabic(c.slice(1))
          : c.match(/^ix/i)
          ? 9 + g.toArabic(c.slice(2))
          : c.match(/^v/i)
          ? 5 + g.toArabic(c.slice(1))
          : c.match(/^iv/i)
          ? 4 + g.toArabic(c.slice(2))
          : c.match(/^i/i)
          ? 1 + g.toArabic(c.slice(1))
          : g.toArabic(c.slice(1))
        : 0;
    },
    getSymbolInfo: function (c, b) {
      var d = c.toUpperCase() == c ? "upper-" : "lower-",
        e = { "·": ["disc", -1], o: ["circle", -2], "§": ["square", -3] };
      if (c in e || (b && b.match(/(disc|circle|square)/)))
        return { index: e[c][1], type: e[c][0] };
      if (c.match(/\d/))
        return {
          index: c ? parseInt(g.getSubsectionSymbol(c), 10) : 0,
          type: "decimal",
        };
      c = c.replace(/\W/g, "").toLowerCase();
      return (!b && c.match(/[ivxl]+/i)) || (b && "alpha" != b) || "roman" == b
        ? { index: g.toArabic(c), type: d + "roman" }
        : c.match(/[a-z]/i)
        ? { index: c.charCodeAt(0) - 97, type: d + "alpha" }
        : { index: -1, type: "disc" };
    },
    getListItemInfo: function (c) {
      if (void 0 !== c.attributes["cke-list-id"])
        return {
          id: c.attributes["cke-list-id"],
          level: c.attributes["cke-list-level"],
        };
      var b = n.parseCssText(c.attributes.style)["mso-list"],
        d = { id: "0", level: "1" };
      b &&
        ((b += " "),
        (d.level = b.match(/level(.+?)\s+/)[1]),
        (d.id = b.match(/l(\d+?)\s+/)[1]));
      c.attributes["cke-list-level"] =
        void 0 !== c.attributes["cke-list-level"]
          ? c.attributes["cke-list-level"]
          : d.level;
      c.attributes["cke-list-id"] = d.id;
      return d;
    },
  };
  g = q.lists;
  q.heuristics = {
    isEdgeListItem: function (c, b) {
      if (!CKEDITOR.env.edge || !c.config.pasteFromWord_heuristicsEdgeList)
        return !1;
      var d = "";
      b.forEach &&
        b.forEach(function (b) {
          d += b.value;
        }, CKEDITOR.NODE_TEXT);
      return d.match(/^(?: |&nbsp;)*\(?[a-zA-Z0-9]+?[\.\)](?: |&nbsp;){2,}/)
        ? !0
        : p.isDegenerateListItem(c, b);
    },
    cleanupEdgeListItem: function (c) {
      var b = !1;
      c.forEach(function (c) {
        b ||
          ((c.value = c.value.replace(/^(?:&nbsp;|[\s])+/, "")),
          c.value.length && (b = !0));
      }, CKEDITOR.NODE_TEXT);
    },
    isDegenerateListItem: function (c, b) {
      return (
        !!b.attributes["cke-list-level"] ||
        (b.attributes.style &&
          !b.attributes.style.match(/mso\-list/) &&
          !!b.find(function (c) {
            if (
              c.type == CKEDITOR.NODE_ELEMENT &&
              b.name.match(/h\d/i) &&
              c.getHtml().match(/^[a-zA-Z0-9]+?[\.\)]$/)
            )
              return !0;
            var e = n.parseCssText(c.attributes && c.attributes.style, !0);
            if (!e) return !1;
            var f = e["font-family"] || "";
            return (
              ((e.font || e["font-size"] || "").match(/7pt/i) &&
                !!c.previous) ||
              f.match(/symbol/i)
            );
          }, !0).length)
      );
    },
    assignListLevels: function (c, b) {
      if (!b.attributes || void 0 === b.attributes["cke-list-level"]) {
        for (
          var d = [z(b)], e = [b], f = [], g = CKEDITOR.tools.array, k = g.map;
          b.next &&
          b.next.attributes &&
          !b.next.attributes["cke-list-level"] &&
          p.isDegenerateListItem(c, b.next);

        )
          (b = b.next), d.push(z(b)), e.push(b);
        var a = k(d, function (a, b) {
            return 0 === b ? 0 : a - d[b - 1];
          }),
          h = this.guessIndentationStep(
            g.filter(d, function (a) {
              return 0 !== a;
            })
          ),
          f = k(d, function (a) {
            return Math.round(a / h);
          });
        -1 !== g.indexOf(f, 0) &&
          (f = k(f, function (a) {
            return a + 1;
          }));
        g.forEach(e, function (a, b) {
          a.attributes["cke-list-level"] = f[b];
        });
        return { indents: d, levels: f, diffs: a };
      }
    },
    guessIndentationStep: function (c) {
      return c.length ? Math.min.apply(null, c) : null;
    },
    correctLevelShift: function (c) {
      if (this.isShifted(c)) {
        var b = CKEDITOR.tools.array.filter(c.children, function (b) {
            return "ul" == b.name || "ol" == b.name;
          }),
          d = CKEDITOR.tools.array.reduce(
            b,
            function (b, c) {
              return (
                c.children &&
                1 == c.children.length &&
                p.isShifted(c.children[0])
                  ? [c]
                  : c.children
              ).concat(b);
            },
            []
          );
        CKEDITOR.tools.array.forEach(b, function (b) {
          b.remove();
        });
        CKEDITOR.tools.array.forEach(d, function (b) {
          c.add(b);
        });
        delete c.name;
      }
    },
    isShifted: function (c) {
      return "li" !== c.name
        ? !1
        : 0 ===
            CKEDITOR.tools.array.filter(c.children, function (b) {
              return b.name &&
                ("ul" == b.name ||
                  "ol" == b.name ||
                  ("p" == b.name && 0 === b.children.length))
                ? !1
                : !0;
            }).length;
    },
  };
  p = q.heuristics;
  g.setListSymbol.removeRedundancies = function (c, b) {
    ((1 === b && "disc" === c["list-style-type"]) ||
      "decimal" === c["list-style-type"]) &&
      delete c["list-style-type"];
  };
  CKEDITOR.cleanWord = CKEDITOR.pasteFilters.word = B.createFilter({
    rules: [t.rules, q.rules],
    additionalTransforms: function (c) {
      CKEDITOR.plugins.clipboard.isCustomDataTypesSupported &&
        (c = t.styles.inliner.inline(c).getBody().getHtml());
      return c.replace(/<!\[/g, "\x3c!--[").replace(/\]>/g, "]--\x3e");
    },
  });
  CKEDITOR.config.pasteFromWord_heuristicsEdgeList = !0;
})();
